#ifndef REGISTERDIALOG_H
#define REGISTERDIALOG_H

#include "global.h"

#include <QMap>
#include <QTimer>
#include <QJsonObject>
#include <QDialog>
#include <functional>


namespace Ui {
class RegisterDialog;
}

// 注册窗口类
class RegisterDialog : public QDialog
{
    Q_OBJECT

public:
    explicit RegisterDialog(QWidget *parent = nullptr);
    ~RegisterDialog();


private:
    // 显示错误提示
    void showTip(QString str, bool b_ok);
    // 初始化对应回复码的回调
    void initHttpHandlers();
    // 向错误提示的容器中添加错误提示
    void addTipErr(TipErr te, QString tips);
    // 向错误提示的容器中删除错误提示
    void delTipErr(TipErr te);

    // 检测用户名是否有效
    bool checkUserValid();
    // 检测用户密码是否有效
    bool checkPasswdValid();
    // 检测邮箱是否有效
    bool checkEmailValid();
    // 检测验证码是否有效
    bool checkVerifyValid();
    // 检测验证码是否有效
    bool checkConfirmValid();

    // 切换页面
    void changeTipPage();



signals:
    void sigSwitchLogin();

private slots:
    // 获取注册验证码
    void on_get_code_clicked();
    // 处理HttpManager发送过来的注册信号
    void slot_reg_mod_finish(ReqId id, QString res, ErrorCodes err);

    // 确认用户注册的槽函数，并通过http发送注册消息
    void on_sure_btn_clicked();

    void on_return_btn_clicked();

    void on_cancel_btn_clicked();

private:
    Ui::RegisterDialog *ui;
    QMap<ReqId, std::function<void(const QJsonObject&)>> m_handlers;
    QMap<TipErr, QString> m_tip_errs;
    QTimer* m_countdown_timer;
    int m_countdown;
};

#endif // REGISTERDIALOG_H
